#pragma once
// MESSAGE ATT_BODY_DATA PACKING

#define MAVLINK_MSG_ID_ATT_BODY_DATA 24

MAVPACKED(
typedef struct __mavlink_att_body_data_t {
 uint32_t state0; /*<  calculating state.*/
 uint32_t state1; /*<  calculating state.*/
 uint32_t state2; /*<  calculating state.*/
 float q0; /*<  quaternion q0.*/
 float q1; /*<  quaternion q1.*/
 float q2; /*<  quaternion q2.*/
 float q3; /*<  quaternion q3.*/
 float roll; /*<  roll angle.*/
 float pitch; /*<  pitch angle.*/
 float yaw; /*<  yaw angle.*/
 float w_ib_b_x; /*<  x axis angle speed in B coordinate.*/
 float w_ib_b_y; /*<  y axis angle speed in B coordinate.*/
 float w_ib_b_z; /*<  z axis angle speed in B coordinate.*/
 float w_ib_b_c_x; /*<  x axis angle speed control in B coordinate.*/
 float w_ib_b_c_y; /*<  y axis angle speed control in B coordinate.*/
 float w_ib_b_c_z; /*<  z axis angle speed control in B coordinate.*/
 float w_ib_b_bia_x; /*<  Zero deviation of gyro x axis.*/
 float w_ib_b_bia_y; /*<  Zero deviation of gyro y axis.*/
 float w_ib_b_bia_z; /*<  Zero deviation of gyro z axis.*/
 float f_ib_b_x; /*<  force in B coordinate.*/
 float f_ib_b_y; /*<  force in B coordinate.*/
 float f_ib_b_z; /*<  force in B coordinate.*/
 float f_ib_b_bia_x; /*<  Zero deviation of force x axis.*/
 float f_ib_b_bia_y; /*<  Zero deviation of force y axis.*/
 float f_ib_b_bia_z; /*<  Zero deviation of force z axis.*/
 float bm_x; /*<  x axis magnet in B coordinate.*/
 float bm_y; /*<  y axis magnet in B coordinate.*/
 float bm_z; /*<  z axis magnet in B coordinate.*/
 float bm_bia_x; /*<  Zero deviation of magnet x axis.*/
 float bm_bia_y; /*<  Zero deviation of magnet y axis.*/
 float bm_bia_z; /*<  Zero deviation of magnet z axis.*/
 float v_eb_n_x; /*<  x axis speed.*/
 float v_eb_n_y; /*<  y axis speed.*/
 float v_eb_n_z; /*<  z axis speed.*/
 float p_eb_n_x; /*<  longitude.*/
 float p_eb_n_y; /*<  latitude.*/
 float p_eb_n_z; /*<  altitude.*/
}) mavlink_att_body_data_t;

#define MAVLINK_MSG_ID_ATT_BODY_DATA_LEN 148
#define MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN 148
#define MAVLINK_MSG_ID_24_LEN 148
#define MAVLINK_MSG_ID_24_MIN_LEN 148

#define MAVLINK_MSG_ID_ATT_BODY_DATA_CRC 156
#define MAVLINK_MSG_ID_24_CRC 156



#if MAVLINK_COMMAND_24BIT
#define MAVLINK_MESSAGE_INFO_ATT_BODY_DATA { \
    24, \
    "ATT_BODY_DATA", \
    37, \
    {  { "state0", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_att_body_data_t, state0) }, \
         { "state1", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_att_body_data_t, state1) }, \
         { "state2", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_att_body_data_t, state2) }, \
         { "q0", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_att_body_data_t, q0) }, \
         { "q1", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_att_body_data_t, q1) }, \
         { "q2", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_att_body_data_t, q2) }, \
         { "q3", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_att_body_data_t, q3) }, \
         { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_att_body_data_t, roll) }, \
         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_att_body_data_t, pitch) }, \
         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_att_body_data_t, yaw) }, \
         { "w_ib_b_x", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_att_body_data_t, w_ib_b_x) }, \
         { "w_ib_b_y", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_att_body_data_t, w_ib_b_y) }, \
         { "w_ib_b_z", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_att_body_data_t, w_ib_b_z) }, \
         { "w_ib_b_c_x", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_att_body_data_t, w_ib_b_c_x) }, \
         { "w_ib_b_c_y", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_att_body_data_t, w_ib_b_c_y) }, \
         { "w_ib_b_c_z", NULL, MAVLINK_TYPE_FLOAT, 0, 60, offsetof(mavlink_att_body_data_t, w_ib_b_c_z) }, \
         { "w_ib_b_bia_x", NULL, MAVLINK_TYPE_FLOAT, 0, 64, offsetof(mavlink_att_body_data_t, w_ib_b_bia_x) }, \
         { "w_ib_b_bia_y", NULL, MAVLINK_TYPE_FLOAT, 0, 68, offsetof(mavlink_att_body_data_t, w_ib_b_bia_y) }, \
         { "w_ib_b_bia_z", NULL, MAVLINK_TYPE_FLOAT, 0, 72, offsetof(mavlink_att_body_data_t, w_ib_b_bia_z) }, \
         { "f_ib_b_x", NULL, MAVLINK_TYPE_FLOAT, 0, 76, offsetof(mavlink_att_body_data_t, f_ib_b_x) }, \
         { "f_ib_b_y", NULL, MAVLINK_TYPE_FLOAT, 0, 80, offsetof(mavlink_att_body_data_t, f_ib_b_y) }, \
         { "f_ib_b_z", NULL, MAVLINK_TYPE_FLOAT, 0, 84, offsetof(mavlink_att_body_data_t, f_ib_b_z) }, \
         { "f_ib_b_bia_x", NULL, MAVLINK_TYPE_FLOAT, 0, 88, offsetof(mavlink_att_body_data_t, f_ib_b_bia_x) }, \
         { "f_ib_b_bia_y", NULL, MAVLINK_TYPE_FLOAT, 0, 92, offsetof(mavlink_att_body_data_t, f_ib_b_bia_y) }, \
         { "f_ib_b_bia_z", NULL, MAVLINK_TYPE_FLOAT, 0, 96, offsetof(mavlink_att_body_data_t, f_ib_b_bia_z) }, \
         { "bm_x", NULL, MAVLINK_TYPE_FLOAT, 0, 100, offsetof(mavlink_att_body_data_t, bm_x) }, \
         { "bm_y", NULL, MAVLINK_TYPE_FLOAT, 0, 104, offsetof(mavlink_att_body_data_t, bm_y) }, \
         { "bm_z", NULL, MAVLINK_TYPE_FLOAT, 0, 108, offsetof(mavlink_att_body_data_t, bm_z) }, \
         { "bm_bia_x", NULL, MAVLINK_TYPE_FLOAT, 0, 112, offsetof(mavlink_att_body_data_t, bm_bia_x) }, \
         { "bm_bia_y", NULL, MAVLINK_TYPE_FLOAT, 0, 116, offsetof(mavlink_att_body_data_t, bm_bia_y) }, \
         { "bm_bia_z", NULL, MAVLINK_TYPE_FLOAT, 0, 120, offsetof(mavlink_att_body_data_t, bm_bia_z) }, \
         { "v_eb_n_x", NULL, MAVLINK_TYPE_FLOAT, 0, 124, offsetof(mavlink_att_body_data_t, v_eb_n_x) }, \
         { "v_eb_n_y", NULL, MAVLINK_TYPE_FLOAT, 0, 128, offsetof(mavlink_att_body_data_t, v_eb_n_y) }, \
         { "v_eb_n_z", NULL, MAVLINK_TYPE_FLOAT, 0, 132, offsetof(mavlink_att_body_data_t, v_eb_n_z) }, \
         { "p_eb_n_x", NULL, MAVLINK_TYPE_FLOAT, 0, 136, offsetof(mavlink_att_body_data_t, p_eb_n_x) }, \
         { "p_eb_n_y", NULL, MAVLINK_TYPE_FLOAT, 0, 140, offsetof(mavlink_att_body_data_t, p_eb_n_y) }, \
         { "p_eb_n_z", NULL, MAVLINK_TYPE_FLOAT, 0, 144, offsetof(mavlink_att_body_data_t, p_eb_n_z) }, \
         } \
}
#else
#define MAVLINK_MESSAGE_INFO_ATT_BODY_DATA { \
    "ATT_BODY_DATA", \
    37, \
    {  { "state0", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_att_body_data_t, state0) }, \
         { "state1", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_att_body_data_t, state1) }, \
         { "state2", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_att_body_data_t, state2) }, \
         { "q0", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_att_body_data_t, q0) }, \
         { "q1", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_att_body_data_t, q1) }, \
         { "q2", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_att_body_data_t, q2) }, \
         { "q3", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_att_body_data_t, q3) }, \
         { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_att_body_data_t, roll) }, \
         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_att_body_data_t, pitch) }, \
         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_att_body_data_t, yaw) }, \
         { "w_ib_b_x", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_att_body_data_t, w_ib_b_x) }, \
         { "w_ib_b_y", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_att_body_data_t, w_ib_b_y) }, \
         { "w_ib_b_z", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_att_body_data_t, w_ib_b_z) }, \
         { "w_ib_b_c_x", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_att_body_data_t, w_ib_b_c_x) }, \
         { "w_ib_b_c_y", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_att_body_data_t, w_ib_b_c_y) }, \
         { "w_ib_b_c_z", NULL, MAVLINK_TYPE_FLOAT, 0, 60, offsetof(mavlink_att_body_data_t, w_ib_b_c_z) }, \
         { "w_ib_b_bia_x", NULL, MAVLINK_TYPE_FLOAT, 0, 64, offsetof(mavlink_att_body_data_t, w_ib_b_bia_x) }, \
         { "w_ib_b_bia_y", NULL, MAVLINK_TYPE_FLOAT, 0, 68, offsetof(mavlink_att_body_data_t, w_ib_b_bia_y) }, \
         { "w_ib_b_bia_z", NULL, MAVLINK_TYPE_FLOAT, 0, 72, offsetof(mavlink_att_body_data_t, w_ib_b_bia_z) }, \
         { "f_ib_b_x", NULL, MAVLINK_TYPE_FLOAT, 0, 76, offsetof(mavlink_att_body_data_t, f_ib_b_x) }, \
         { "f_ib_b_y", NULL, MAVLINK_TYPE_FLOAT, 0, 80, offsetof(mavlink_att_body_data_t, f_ib_b_y) }, \
         { "f_ib_b_z", NULL, MAVLINK_TYPE_FLOAT, 0, 84, offsetof(mavlink_att_body_data_t, f_ib_b_z) }, \
         { "f_ib_b_bia_x", NULL, MAVLINK_TYPE_FLOAT, 0, 88, offsetof(mavlink_att_body_data_t, f_ib_b_bia_x) }, \
         { "f_ib_b_bia_y", NULL, MAVLINK_TYPE_FLOAT, 0, 92, offsetof(mavlink_att_body_data_t, f_ib_b_bia_y) }, \
         { "f_ib_b_bia_z", NULL, MAVLINK_TYPE_FLOAT, 0, 96, offsetof(mavlink_att_body_data_t, f_ib_b_bia_z) }, \
         { "bm_x", NULL, MAVLINK_TYPE_FLOAT, 0, 100, offsetof(mavlink_att_body_data_t, bm_x) }, \
         { "bm_y", NULL, MAVLINK_TYPE_FLOAT, 0, 104, offsetof(mavlink_att_body_data_t, bm_y) }, \
         { "bm_z", NULL, MAVLINK_TYPE_FLOAT, 0, 108, offsetof(mavlink_att_body_data_t, bm_z) }, \
         { "bm_bia_x", NULL, MAVLINK_TYPE_FLOAT, 0, 112, offsetof(mavlink_att_body_data_t, bm_bia_x) }, \
         { "bm_bia_y", NULL, MAVLINK_TYPE_FLOAT, 0, 116, offsetof(mavlink_att_body_data_t, bm_bia_y) }, \
         { "bm_bia_z", NULL, MAVLINK_TYPE_FLOAT, 0, 120, offsetof(mavlink_att_body_data_t, bm_bia_z) }, \
         { "v_eb_n_x", NULL, MAVLINK_TYPE_FLOAT, 0, 124, offsetof(mavlink_att_body_data_t, v_eb_n_x) }, \
         { "v_eb_n_y", NULL, MAVLINK_TYPE_FLOAT, 0, 128, offsetof(mavlink_att_body_data_t, v_eb_n_y) }, \
         { "v_eb_n_z", NULL, MAVLINK_TYPE_FLOAT, 0, 132, offsetof(mavlink_att_body_data_t, v_eb_n_z) }, \
         { "p_eb_n_x", NULL, MAVLINK_TYPE_FLOAT, 0, 136, offsetof(mavlink_att_body_data_t, p_eb_n_x) }, \
         { "p_eb_n_y", NULL, MAVLINK_TYPE_FLOAT, 0, 140, offsetof(mavlink_att_body_data_t, p_eb_n_y) }, \
         { "p_eb_n_z", NULL, MAVLINK_TYPE_FLOAT, 0, 144, offsetof(mavlink_att_body_data_t, p_eb_n_z) }, \
         } \
}
#endif

/**
 * @brief Pack a att_body_data message
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param msg The MAVLink message to compress the data into
 *
 * @param state0  calculating state.
 * @param state1  calculating state.
 * @param state2  calculating state.
 * @param q0  quaternion q0.
 * @param q1  quaternion q1.
 * @param q2  quaternion q2.
 * @param q3  quaternion q3.
 * @param roll  roll angle.
 * @param pitch  pitch angle.
 * @param yaw  yaw angle.
 * @param w_ib_b_x  x axis angle speed in B coordinate.
 * @param w_ib_b_y  y axis angle speed in B coordinate.
 * @param w_ib_b_z  z axis angle speed in B coordinate.
 * @param w_ib_b_c_x  x axis angle speed control in B coordinate.
 * @param w_ib_b_c_y  y axis angle speed control in B coordinate.
 * @param w_ib_b_c_z  z axis angle speed control in B coordinate.
 * @param w_ib_b_bia_x  Zero deviation of gyro x axis.
 * @param w_ib_b_bia_y  Zero deviation of gyro y axis.
 * @param w_ib_b_bia_z  Zero deviation of gyro z axis.
 * @param f_ib_b_x  force in B coordinate.
 * @param f_ib_b_y  force in B coordinate.
 * @param f_ib_b_z  force in B coordinate.
 * @param f_ib_b_bia_x  Zero deviation of force x axis.
 * @param f_ib_b_bia_y  Zero deviation of force y axis.
 * @param f_ib_b_bia_z  Zero deviation of force z axis.
 * @param bm_x  x axis magnet in B coordinate.
 * @param bm_y  y axis magnet in B coordinate.
 * @param bm_z  z axis magnet in B coordinate.
 * @param bm_bia_x  Zero deviation of magnet x axis.
 * @param bm_bia_y  Zero deviation of magnet y axis.
 * @param bm_bia_z  Zero deviation of magnet z axis.
 * @param v_eb_n_x  x axis speed.
 * @param v_eb_n_y  y axis speed.
 * @param v_eb_n_z  z axis speed.
 * @param p_eb_n_x  longitude.
 * @param p_eb_n_y  latitude.
 * @param p_eb_n_z  altitude.
 * @return length of the message in bytes (excluding serial stream start sign)
 */
static inline uint16_t mavlink_msg_att_body_data_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
                               uint32_t state0, uint32_t state1, uint32_t state2, float q0, float q1, float q2, float q3, float roll, float pitch, float yaw, float w_ib_b_x, float w_ib_b_y, float w_ib_b_z, float w_ib_b_c_x, float w_ib_b_c_y, float w_ib_b_c_z, float w_ib_b_bia_x, float w_ib_b_bia_y, float w_ib_b_bia_z, float f_ib_b_x, float f_ib_b_y, float f_ib_b_z, float f_ib_b_bia_x, float f_ib_b_bia_y, float f_ib_b_bia_z, float bm_x, float bm_y, float bm_z, float bm_bia_x, float bm_bia_y, float bm_bia_z, float v_eb_n_x, float v_eb_n_y, float v_eb_n_z, float p_eb_n_x, float p_eb_n_y, float p_eb_n_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char buf[MAVLINK_MSG_ID_ATT_BODY_DATA_LEN];
    _mav_put_uint32_t(buf, 0, state0);
    _mav_put_uint32_t(buf, 4, state1);
    _mav_put_uint32_t(buf, 8, state2);
    _mav_put_float(buf, 12, q0);
    _mav_put_float(buf, 16, q1);
    _mav_put_float(buf, 20, q2);
    _mav_put_float(buf, 24, q3);
    _mav_put_float(buf, 28, roll);
    _mav_put_float(buf, 32, pitch);
    _mav_put_float(buf, 36, yaw);
    _mav_put_float(buf, 40, w_ib_b_x);
    _mav_put_float(buf, 44, w_ib_b_y);
    _mav_put_float(buf, 48, w_ib_b_z);
    _mav_put_float(buf, 52, w_ib_b_c_x);
    _mav_put_float(buf, 56, w_ib_b_c_y);
    _mav_put_float(buf, 60, w_ib_b_c_z);
    _mav_put_float(buf, 64, w_ib_b_bia_x);
    _mav_put_float(buf, 68, w_ib_b_bia_y);
    _mav_put_float(buf, 72, w_ib_b_bia_z);
    _mav_put_float(buf, 76, f_ib_b_x);
    _mav_put_float(buf, 80, f_ib_b_y);
    _mav_put_float(buf, 84, f_ib_b_z);
    _mav_put_float(buf, 88, f_ib_b_bia_x);
    _mav_put_float(buf, 92, f_ib_b_bia_y);
    _mav_put_float(buf, 96, f_ib_b_bia_z);
    _mav_put_float(buf, 100, bm_x);
    _mav_put_float(buf, 104, bm_y);
    _mav_put_float(buf, 108, bm_z);
    _mav_put_float(buf, 112, bm_bia_x);
    _mav_put_float(buf, 116, bm_bia_y);
    _mav_put_float(buf, 120, bm_bia_z);
    _mav_put_float(buf, 124, v_eb_n_x);
    _mav_put_float(buf, 128, v_eb_n_y);
    _mav_put_float(buf, 132, v_eb_n_z);
    _mav_put_float(buf, 136, p_eb_n_x);
    _mav_put_float(buf, 140, p_eb_n_y);
    _mav_put_float(buf, 144, p_eb_n_z);

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN);
#else
    mavlink_att_body_data_t packet;
    packet.state0 = state0;
    packet.state1 = state1;
    packet.state2 = state2;
    packet.q0 = q0;
    packet.q1 = q1;
    packet.q2 = q2;
    packet.q3 = q3;
    packet.roll = roll;
    packet.pitch = pitch;
    packet.yaw = yaw;
    packet.w_ib_b_x = w_ib_b_x;
    packet.w_ib_b_y = w_ib_b_y;
    packet.w_ib_b_z = w_ib_b_z;
    packet.w_ib_b_c_x = w_ib_b_c_x;
    packet.w_ib_b_c_y = w_ib_b_c_y;
    packet.w_ib_b_c_z = w_ib_b_c_z;
    packet.w_ib_b_bia_x = w_ib_b_bia_x;
    packet.w_ib_b_bia_y = w_ib_b_bia_y;
    packet.w_ib_b_bia_z = w_ib_b_bia_z;
    packet.f_ib_b_x = f_ib_b_x;
    packet.f_ib_b_y = f_ib_b_y;
    packet.f_ib_b_z = f_ib_b_z;
    packet.f_ib_b_bia_x = f_ib_b_bia_x;
    packet.f_ib_b_bia_y = f_ib_b_bia_y;
    packet.f_ib_b_bia_z = f_ib_b_bia_z;
    packet.bm_x = bm_x;
    packet.bm_y = bm_y;
    packet.bm_z = bm_z;
    packet.bm_bia_x = bm_bia_x;
    packet.bm_bia_y = bm_bia_y;
    packet.bm_bia_z = bm_bia_z;
    packet.v_eb_n_x = v_eb_n_x;
    packet.v_eb_n_y = v_eb_n_y;
    packet.v_eb_n_z = v_eb_n_z;
    packet.p_eb_n_x = p_eb_n_x;
    packet.p_eb_n_y = p_eb_n_y;
    packet.p_eb_n_z = p_eb_n_z;

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN);
#endif

    msg->msgid = MAVLINK_MSG_ID_ATT_BODY_DATA;
    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_CRC);
}

/**
 * @brief Pack a att_body_data message on a channel
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param chan The MAVLink channel this message will be sent over
 * @param msg The MAVLink message to compress the data into
 * @param state0  calculating state.
 * @param state1  calculating state.
 * @param state2  calculating state.
 * @param q0  quaternion q0.
 * @param q1  quaternion q1.
 * @param q2  quaternion q2.
 * @param q3  quaternion q3.
 * @param roll  roll angle.
 * @param pitch  pitch angle.
 * @param yaw  yaw angle.
 * @param w_ib_b_x  x axis angle speed in B coordinate.
 * @param w_ib_b_y  y axis angle speed in B coordinate.
 * @param w_ib_b_z  z axis angle speed in B coordinate.
 * @param w_ib_b_c_x  x axis angle speed control in B coordinate.
 * @param w_ib_b_c_y  y axis angle speed control in B coordinate.
 * @param w_ib_b_c_z  z axis angle speed control in B coordinate.
 * @param w_ib_b_bia_x  Zero deviation of gyro x axis.
 * @param w_ib_b_bia_y  Zero deviation of gyro y axis.
 * @param w_ib_b_bia_z  Zero deviation of gyro z axis.
 * @param f_ib_b_x  force in B coordinate.
 * @param f_ib_b_y  force in B coordinate.
 * @param f_ib_b_z  force in B coordinate.
 * @param f_ib_b_bia_x  Zero deviation of force x axis.
 * @param f_ib_b_bia_y  Zero deviation of force y axis.
 * @param f_ib_b_bia_z  Zero deviation of force z axis.
 * @param bm_x  x axis magnet in B coordinate.
 * @param bm_y  y axis magnet in B coordinate.
 * @param bm_z  z axis magnet in B coordinate.
 * @param bm_bia_x  Zero deviation of magnet x axis.
 * @param bm_bia_y  Zero deviation of magnet y axis.
 * @param bm_bia_z  Zero deviation of magnet z axis.
 * @param v_eb_n_x  x axis speed.
 * @param v_eb_n_y  y axis speed.
 * @param v_eb_n_z  z axis speed.
 * @param p_eb_n_x  longitude.
 * @param p_eb_n_y  latitude.
 * @param p_eb_n_z  altitude.
 * @return length of the message in bytes (excluding serial stream start sign)
 */
static inline uint16_t mavlink_msg_att_body_data_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
                               mavlink_message_t* msg,
                                   uint32_t state0,uint32_t state1,uint32_t state2,float q0,float q1,float q2,float q3,float roll,float pitch,float yaw,float w_ib_b_x,float w_ib_b_y,float w_ib_b_z,float w_ib_b_c_x,float w_ib_b_c_y,float w_ib_b_c_z,float w_ib_b_bia_x,float w_ib_b_bia_y,float w_ib_b_bia_z,float f_ib_b_x,float f_ib_b_y,float f_ib_b_z,float f_ib_b_bia_x,float f_ib_b_bia_y,float f_ib_b_bia_z,float bm_x,float bm_y,float bm_z,float bm_bia_x,float bm_bia_y,float bm_bia_z,float v_eb_n_x,float v_eb_n_y,float v_eb_n_z,float p_eb_n_x,float p_eb_n_y,float p_eb_n_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char buf[MAVLINK_MSG_ID_ATT_BODY_DATA_LEN];
    _mav_put_uint32_t(buf, 0, state0);
    _mav_put_uint32_t(buf, 4, state1);
    _mav_put_uint32_t(buf, 8, state2);
    _mav_put_float(buf, 12, q0);
    _mav_put_float(buf, 16, q1);
    _mav_put_float(buf, 20, q2);
    _mav_put_float(buf, 24, q3);
    _mav_put_float(buf, 28, roll);
    _mav_put_float(buf, 32, pitch);
    _mav_put_float(buf, 36, yaw);
    _mav_put_float(buf, 40, w_ib_b_x);
    _mav_put_float(buf, 44, w_ib_b_y);
    _mav_put_float(buf, 48, w_ib_b_z);
    _mav_put_float(buf, 52, w_ib_b_c_x);
    _mav_put_float(buf, 56, w_ib_b_c_y);
    _mav_put_float(buf, 60, w_ib_b_c_z);
    _mav_put_float(buf, 64, w_ib_b_bia_x);
    _mav_put_float(buf, 68, w_ib_b_bia_y);
    _mav_put_float(buf, 72, w_ib_b_bia_z);
    _mav_put_float(buf, 76, f_ib_b_x);
    _mav_put_float(buf, 80, f_ib_b_y);
    _mav_put_float(buf, 84, f_ib_b_z);
    _mav_put_float(buf, 88, f_ib_b_bia_x);
    _mav_put_float(buf, 92, f_ib_b_bia_y);
    _mav_put_float(buf, 96, f_ib_b_bia_z);
    _mav_put_float(buf, 100, bm_x);
    _mav_put_float(buf, 104, bm_y);
    _mav_put_float(buf, 108, bm_z);
    _mav_put_float(buf, 112, bm_bia_x);
    _mav_put_float(buf, 116, bm_bia_y);
    _mav_put_float(buf, 120, bm_bia_z);
    _mav_put_float(buf, 124, v_eb_n_x);
    _mav_put_float(buf, 128, v_eb_n_y);
    _mav_put_float(buf, 132, v_eb_n_z);
    _mav_put_float(buf, 136, p_eb_n_x);
    _mav_put_float(buf, 140, p_eb_n_y);
    _mav_put_float(buf, 144, p_eb_n_z);

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN);
#else
    mavlink_att_body_data_t packet;
    packet.state0 = state0;
    packet.state1 = state1;
    packet.state2 = state2;
    packet.q0 = q0;
    packet.q1 = q1;
    packet.q2 = q2;
    packet.q3 = q3;
    packet.roll = roll;
    packet.pitch = pitch;
    packet.yaw = yaw;
    packet.w_ib_b_x = w_ib_b_x;
    packet.w_ib_b_y = w_ib_b_y;
    packet.w_ib_b_z = w_ib_b_z;
    packet.w_ib_b_c_x = w_ib_b_c_x;
    packet.w_ib_b_c_y = w_ib_b_c_y;
    packet.w_ib_b_c_z = w_ib_b_c_z;
    packet.w_ib_b_bia_x = w_ib_b_bia_x;
    packet.w_ib_b_bia_y = w_ib_b_bia_y;
    packet.w_ib_b_bia_z = w_ib_b_bia_z;
    packet.f_ib_b_x = f_ib_b_x;
    packet.f_ib_b_y = f_ib_b_y;
    packet.f_ib_b_z = f_ib_b_z;
    packet.f_ib_b_bia_x = f_ib_b_bia_x;
    packet.f_ib_b_bia_y = f_ib_b_bia_y;
    packet.f_ib_b_bia_z = f_ib_b_bia_z;
    packet.bm_x = bm_x;
    packet.bm_y = bm_y;
    packet.bm_z = bm_z;
    packet.bm_bia_x = bm_bia_x;
    packet.bm_bia_y = bm_bia_y;
    packet.bm_bia_z = bm_bia_z;
    packet.v_eb_n_x = v_eb_n_x;
    packet.v_eb_n_y = v_eb_n_y;
    packet.v_eb_n_z = v_eb_n_z;
    packet.p_eb_n_x = p_eb_n_x;
    packet.p_eb_n_y = p_eb_n_y;
    packet.p_eb_n_z = p_eb_n_z;

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN);
#endif

    msg->msgid = MAVLINK_MSG_ID_ATT_BODY_DATA;
    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_CRC);
}

/**
 * @brief Encode a att_body_data struct
 *
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param msg The MAVLink message to compress the data into
 * @param att_body_data C-struct to read the message contents from
 */
static inline uint16_t mavlink_msg_att_body_data_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_att_body_data_t* att_body_data)
{
    return mavlink_msg_att_body_data_pack(system_id, component_id, msg, att_body_data->state0, att_body_data->state1, att_body_data->state2, att_body_data->q0, att_body_data->q1, att_body_data->q2, att_body_data->q3, att_body_data->roll, att_body_data->pitch, att_body_data->yaw, att_body_data->w_ib_b_x, att_body_data->w_ib_b_y, att_body_data->w_ib_b_z, att_body_data->w_ib_b_c_x, att_body_data->w_ib_b_c_y, att_body_data->w_ib_b_c_z, att_body_data->w_ib_b_bia_x, att_body_data->w_ib_b_bia_y, att_body_data->w_ib_b_bia_z, att_body_data->f_ib_b_x, att_body_data->f_ib_b_y, att_body_data->f_ib_b_z, att_body_data->f_ib_b_bia_x, att_body_data->f_ib_b_bia_y, att_body_data->f_ib_b_bia_z, att_body_data->bm_x, att_body_data->bm_y, att_body_data->bm_z, att_body_data->bm_bia_x, att_body_data->bm_bia_y, att_body_data->bm_bia_z, att_body_data->v_eb_n_x, att_body_data->v_eb_n_y, att_body_data->v_eb_n_z, att_body_data->p_eb_n_x, att_body_data->p_eb_n_y, att_body_data->p_eb_n_z);
}

/**
 * @brief Encode a att_body_data struct on a channel
 *
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param chan The MAVLink channel this message will be sent over
 * @param msg The MAVLink message to compress the data into
 * @param att_body_data C-struct to read the message contents from
 */
static inline uint16_t mavlink_msg_att_body_data_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_att_body_data_t* att_body_data)
{
    return mavlink_msg_att_body_data_pack_chan(system_id, component_id, chan, msg, att_body_data->state0, att_body_data->state1, att_body_data->state2, att_body_data->q0, att_body_data->q1, att_body_data->q2, att_body_data->q3, att_body_data->roll, att_body_data->pitch, att_body_data->yaw, att_body_data->w_ib_b_x, att_body_data->w_ib_b_y, att_body_data->w_ib_b_z, att_body_data->w_ib_b_c_x, att_body_data->w_ib_b_c_y, att_body_data->w_ib_b_c_z, att_body_data->w_ib_b_bia_x, att_body_data->w_ib_b_bia_y, att_body_data->w_ib_b_bia_z, att_body_data->f_ib_b_x, att_body_data->f_ib_b_y, att_body_data->f_ib_b_z, att_body_data->f_ib_b_bia_x, att_body_data->f_ib_b_bia_y, att_body_data->f_ib_b_bia_z, att_body_data->bm_x, att_body_data->bm_y, att_body_data->bm_z, att_body_data->bm_bia_x, att_body_data->bm_bia_y, att_body_data->bm_bia_z, att_body_data->v_eb_n_x, att_body_data->v_eb_n_y, att_body_data->v_eb_n_z, att_body_data->p_eb_n_x, att_body_data->p_eb_n_y, att_body_data->p_eb_n_z);
}

/**
 * @brief Send a att_body_data message
 * @param chan MAVLink channel to send the message
 *
 * @param state0  calculating state.
 * @param state1  calculating state.
 * @param state2  calculating state.
 * @param q0  quaternion q0.
 * @param q1  quaternion q1.
 * @param q2  quaternion q2.
 * @param q3  quaternion q3.
 * @param roll  roll angle.
 * @param pitch  pitch angle.
 * @param yaw  yaw angle.
 * @param w_ib_b_x  x axis angle speed in B coordinate.
 * @param w_ib_b_y  y axis angle speed in B coordinate.
 * @param w_ib_b_z  z axis angle speed in B coordinate.
 * @param w_ib_b_c_x  x axis angle speed control in B coordinate.
 * @param w_ib_b_c_y  y axis angle speed control in B coordinate.
 * @param w_ib_b_c_z  z axis angle speed control in B coordinate.
 * @param w_ib_b_bia_x  Zero deviation of gyro x axis.
 * @param w_ib_b_bia_y  Zero deviation of gyro y axis.
 * @param w_ib_b_bia_z  Zero deviation of gyro z axis.
 * @param f_ib_b_x  force in B coordinate.
 * @param f_ib_b_y  force in B coordinate.
 * @param f_ib_b_z  force in B coordinate.
 * @param f_ib_b_bia_x  Zero deviation of force x axis.
 * @param f_ib_b_bia_y  Zero deviation of force y axis.
 * @param f_ib_b_bia_z  Zero deviation of force z axis.
 * @param bm_x  x axis magnet in B coordinate.
 * @param bm_y  y axis magnet in B coordinate.
 * @param bm_z  z axis magnet in B coordinate.
 * @param bm_bia_x  Zero deviation of magnet x axis.
 * @param bm_bia_y  Zero deviation of magnet y axis.
 * @param bm_bia_z  Zero deviation of magnet z axis.
 * @param v_eb_n_x  x axis speed.
 * @param v_eb_n_y  y axis speed.
 * @param v_eb_n_z  z axis speed.
 * @param p_eb_n_x  longitude.
 * @param p_eb_n_y  latitude.
 * @param p_eb_n_z  altitude.
 */
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS

static inline void mavlink_msg_att_body_data_send(mavlink_channel_t chan, uint32_t state0, uint32_t state1, uint32_t state2, float q0, float q1, float q2, float q3, float roll, float pitch, float yaw, float w_ib_b_x, float w_ib_b_y, float w_ib_b_z, float w_ib_b_c_x, float w_ib_b_c_y, float w_ib_b_c_z, float w_ib_b_bia_x, float w_ib_b_bia_y, float w_ib_b_bia_z, float f_ib_b_x, float f_ib_b_y, float f_ib_b_z, float f_ib_b_bia_x, float f_ib_b_bia_y, float f_ib_b_bia_z, float bm_x, float bm_y, float bm_z, float bm_bia_x, float bm_bia_y, float bm_bia_z, float v_eb_n_x, float v_eb_n_y, float v_eb_n_z, float p_eb_n_x, float p_eb_n_y, float p_eb_n_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char buf[MAVLINK_MSG_ID_ATT_BODY_DATA_LEN];
    _mav_put_uint32_t(buf, 0, state0);
    _mav_put_uint32_t(buf, 4, state1);
    _mav_put_uint32_t(buf, 8, state2);
    _mav_put_float(buf, 12, q0);
    _mav_put_float(buf, 16, q1);
    _mav_put_float(buf, 20, q2);
    _mav_put_float(buf, 24, q3);
    _mav_put_float(buf, 28, roll);
    _mav_put_float(buf, 32, pitch);
    _mav_put_float(buf, 36, yaw);
    _mav_put_float(buf, 40, w_ib_b_x);
    _mav_put_float(buf, 44, w_ib_b_y);
    _mav_put_float(buf, 48, w_ib_b_z);
    _mav_put_float(buf, 52, w_ib_b_c_x);
    _mav_put_float(buf, 56, w_ib_b_c_y);
    _mav_put_float(buf, 60, w_ib_b_c_z);
    _mav_put_float(buf, 64, w_ib_b_bia_x);
    _mav_put_float(buf, 68, w_ib_b_bia_y);
    _mav_put_float(buf, 72, w_ib_b_bia_z);
    _mav_put_float(buf, 76, f_ib_b_x);
    _mav_put_float(buf, 80, f_ib_b_y);
    _mav_put_float(buf, 84, f_ib_b_z);
    _mav_put_float(buf, 88, f_ib_b_bia_x);
    _mav_put_float(buf, 92, f_ib_b_bia_y);
    _mav_put_float(buf, 96, f_ib_b_bia_z);
    _mav_put_float(buf, 100, bm_x);
    _mav_put_float(buf, 104, bm_y);
    _mav_put_float(buf, 108, bm_z);
    _mav_put_float(buf, 112, bm_bia_x);
    _mav_put_float(buf, 116, bm_bia_y);
    _mav_put_float(buf, 120, bm_bia_z);
    _mav_put_float(buf, 124, v_eb_n_x);
    _mav_put_float(buf, 128, v_eb_n_y);
    _mav_put_float(buf, 132, v_eb_n_z);
    _mav_put_float(buf, 136, p_eb_n_x);
    _mav_put_float(buf, 140, p_eb_n_y);
    _mav_put_float(buf, 144, p_eb_n_z);

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_BODY_DATA, buf, MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_CRC);
#else
    mavlink_att_body_data_t packet;
    packet.state0 = state0;
    packet.state1 = state1;
    packet.state2 = state2;
    packet.q0 = q0;
    packet.q1 = q1;
    packet.q2 = q2;
    packet.q3 = q3;
    packet.roll = roll;
    packet.pitch = pitch;
    packet.yaw = yaw;
    packet.w_ib_b_x = w_ib_b_x;
    packet.w_ib_b_y = w_ib_b_y;
    packet.w_ib_b_z = w_ib_b_z;
    packet.w_ib_b_c_x = w_ib_b_c_x;
    packet.w_ib_b_c_y = w_ib_b_c_y;
    packet.w_ib_b_c_z = w_ib_b_c_z;
    packet.w_ib_b_bia_x = w_ib_b_bia_x;
    packet.w_ib_b_bia_y = w_ib_b_bia_y;
    packet.w_ib_b_bia_z = w_ib_b_bia_z;
    packet.f_ib_b_x = f_ib_b_x;
    packet.f_ib_b_y = f_ib_b_y;
    packet.f_ib_b_z = f_ib_b_z;
    packet.f_ib_b_bia_x = f_ib_b_bia_x;
    packet.f_ib_b_bia_y = f_ib_b_bia_y;
    packet.f_ib_b_bia_z = f_ib_b_bia_z;
    packet.bm_x = bm_x;
    packet.bm_y = bm_y;
    packet.bm_z = bm_z;
    packet.bm_bia_x = bm_bia_x;
    packet.bm_bia_y = bm_bia_y;
    packet.bm_bia_z = bm_bia_z;
    packet.v_eb_n_x = v_eb_n_x;
    packet.v_eb_n_y = v_eb_n_y;
    packet.v_eb_n_z = v_eb_n_z;
    packet.p_eb_n_x = p_eb_n_x;
    packet.p_eb_n_y = p_eb_n_y;
    packet.p_eb_n_z = p_eb_n_z;

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_BODY_DATA, (const char *)&packet, MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_CRC);
#endif
}

/**
 * @brief Send a att_body_data message
 * @param chan MAVLink channel to send the message
 * @param struct The MAVLink struct to serialize
 */
static inline void mavlink_msg_att_body_data_send_struct(mavlink_channel_t chan, const mavlink_att_body_data_t* att_body_data)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    mavlink_msg_att_body_data_send(chan, att_body_data->state0, att_body_data->state1, att_body_data->state2, att_body_data->q0, att_body_data->q1, att_body_data->q2, att_body_data->q3, att_body_data->roll, att_body_data->pitch, att_body_data->yaw, att_body_data->w_ib_b_x, att_body_data->w_ib_b_y, att_body_data->w_ib_b_z, att_body_data->w_ib_b_c_x, att_body_data->w_ib_b_c_y, att_body_data->w_ib_b_c_z, att_body_data->w_ib_b_bia_x, att_body_data->w_ib_b_bia_y, att_body_data->w_ib_b_bia_z, att_body_data->f_ib_b_x, att_body_data->f_ib_b_y, att_body_data->f_ib_b_z, att_body_data->f_ib_b_bia_x, att_body_data->f_ib_b_bia_y, att_body_data->f_ib_b_bia_z, att_body_data->bm_x, att_body_data->bm_y, att_body_data->bm_z, att_body_data->bm_bia_x, att_body_data->bm_bia_y, att_body_data->bm_bia_z, att_body_data->v_eb_n_x, att_body_data->v_eb_n_y, att_body_data->v_eb_n_z, att_body_data->p_eb_n_x, att_body_data->p_eb_n_y, att_body_data->p_eb_n_z);
#else
    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_BODY_DATA, (const char *)att_body_data, MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_CRC);
#endif
}

#if MAVLINK_MSG_ID_ATT_BODY_DATA_LEN <= MAVLINK_MAX_PAYLOAD_LEN
/*
  This varient of _send() can be used to save stack space by re-using
  memory from the receive buffer.  The caller provides a
  mavlink_message_t which is the size of a full mavlink message. This
  is usually the receive buffer for the channel, and allows a reply to an
  incoming message with minimum stack space usage.
 */
static inline void mavlink_msg_att_body_data_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t state0, uint32_t state1, uint32_t state2, float q0, float q1, float q2, float q3, float roll, float pitch, float yaw, float w_ib_b_x, float w_ib_b_y, float w_ib_b_z, float w_ib_b_c_x, float w_ib_b_c_y, float w_ib_b_c_z, float w_ib_b_bia_x, float w_ib_b_bia_y, float w_ib_b_bia_z, float f_ib_b_x, float f_ib_b_y, float f_ib_b_z, float f_ib_b_bia_x, float f_ib_b_bia_y, float f_ib_b_bia_z, float bm_x, float bm_y, float bm_z, float bm_bia_x, float bm_bia_y, float bm_bia_z, float v_eb_n_x, float v_eb_n_y, float v_eb_n_z, float p_eb_n_x, float p_eb_n_y, float p_eb_n_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char *buf = (char *)msgbuf;
    _mav_put_uint32_t(buf, 0, state0);
    _mav_put_uint32_t(buf, 4, state1);
    _mav_put_uint32_t(buf, 8, state2);
    _mav_put_float(buf, 12, q0);
    _mav_put_float(buf, 16, q1);
    _mav_put_float(buf, 20, q2);
    _mav_put_float(buf, 24, q3);
    _mav_put_float(buf, 28, roll);
    _mav_put_float(buf, 32, pitch);
    _mav_put_float(buf, 36, yaw);
    _mav_put_float(buf, 40, w_ib_b_x);
    _mav_put_float(buf, 44, w_ib_b_y);
    _mav_put_float(buf, 48, w_ib_b_z);
    _mav_put_float(buf, 52, w_ib_b_c_x);
    _mav_put_float(buf, 56, w_ib_b_c_y);
    _mav_put_float(buf, 60, w_ib_b_c_z);
    _mav_put_float(buf, 64, w_ib_b_bia_x);
    _mav_put_float(buf, 68, w_ib_b_bia_y);
    _mav_put_float(buf, 72, w_ib_b_bia_z);
    _mav_put_float(buf, 76, f_ib_b_x);
    _mav_put_float(buf, 80, f_ib_b_y);
    _mav_put_float(buf, 84, f_ib_b_z);
    _mav_put_float(buf, 88, f_ib_b_bia_x);
    _mav_put_float(buf, 92, f_ib_b_bia_y);
    _mav_put_float(buf, 96, f_ib_b_bia_z);
    _mav_put_float(buf, 100, bm_x);
    _mav_put_float(buf, 104, bm_y);
    _mav_put_float(buf, 108, bm_z);
    _mav_put_float(buf, 112, bm_bia_x);
    _mav_put_float(buf, 116, bm_bia_y);
    _mav_put_float(buf, 120, bm_bia_z);
    _mav_put_float(buf, 124, v_eb_n_x);
    _mav_put_float(buf, 128, v_eb_n_y);
    _mav_put_float(buf, 132, v_eb_n_z);
    _mav_put_float(buf, 136, p_eb_n_x);
    _mav_put_float(buf, 140, p_eb_n_y);
    _mav_put_float(buf, 144, p_eb_n_z);

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_BODY_DATA, buf, MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_CRC);
#else
    mavlink_att_body_data_t *packet = (mavlink_att_body_data_t *)msgbuf;
    packet->state0 = state0;
    packet->state1 = state1;
    packet->state2 = state2;
    packet->q0 = q0;
    packet->q1 = q1;
    packet->q2 = q2;
    packet->q3 = q3;
    packet->roll = roll;
    packet->pitch = pitch;
    packet->yaw = yaw;
    packet->w_ib_b_x = w_ib_b_x;
    packet->w_ib_b_y = w_ib_b_y;
    packet->w_ib_b_z = w_ib_b_z;
    packet->w_ib_b_c_x = w_ib_b_c_x;
    packet->w_ib_b_c_y = w_ib_b_c_y;
    packet->w_ib_b_c_z = w_ib_b_c_z;
    packet->w_ib_b_bia_x = w_ib_b_bia_x;
    packet->w_ib_b_bia_y = w_ib_b_bia_y;
    packet->w_ib_b_bia_z = w_ib_b_bia_z;
    packet->f_ib_b_x = f_ib_b_x;
    packet->f_ib_b_y = f_ib_b_y;
    packet->f_ib_b_z = f_ib_b_z;
    packet->f_ib_b_bia_x = f_ib_b_bia_x;
    packet->f_ib_b_bia_y = f_ib_b_bia_y;
    packet->f_ib_b_bia_z = f_ib_b_bia_z;
    packet->bm_x = bm_x;
    packet->bm_y = bm_y;
    packet->bm_z = bm_z;
    packet->bm_bia_x = bm_bia_x;
    packet->bm_bia_y = bm_bia_y;
    packet->bm_bia_z = bm_bia_z;
    packet->v_eb_n_x = v_eb_n_x;
    packet->v_eb_n_y = v_eb_n_y;
    packet->v_eb_n_z = v_eb_n_z;
    packet->p_eb_n_x = p_eb_n_x;
    packet->p_eb_n_y = p_eb_n_y;
    packet->p_eb_n_z = p_eb_n_z;

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_BODY_DATA, (const char *)packet, MAVLINK_MSG_ID_ATT_BODY_DATA_MIN_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN, MAVLINK_MSG_ID_ATT_BODY_DATA_CRC);
#endif
}
#endif

#endif

// MESSAGE ATT_BODY_DATA UNPACKING


/**
 * @brief Get field state0 from att_body_data message
 *
 * @return  calculating state.
 */
static inline uint32_t mavlink_msg_att_body_data_get_state0(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint32_t(msg,  0);
}

/**
 * @brief Get field state1 from att_body_data message
 *
 * @return  calculating state.
 */
static inline uint32_t mavlink_msg_att_body_data_get_state1(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint32_t(msg,  4);
}

/**
 * @brief Get field state2 from att_body_data message
 *
 * @return  calculating state.
 */
static inline uint32_t mavlink_msg_att_body_data_get_state2(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint32_t(msg,  8);
}

/**
 * @brief Get field q0 from att_body_data message
 *
 * @return  quaternion q0.
 */
static inline float mavlink_msg_att_body_data_get_q0(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  12);
}

/**
 * @brief Get field q1 from att_body_data message
 *
 * @return  quaternion q1.
 */
static inline float mavlink_msg_att_body_data_get_q1(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  16);
}

/**
 * @brief Get field q2 from att_body_data message
 *
 * @return  quaternion q2.
 */
static inline float mavlink_msg_att_body_data_get_q2(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  20);
}

/**
 * @brief Get field q3 from att_body_data message
 *
 * @return  quaternion q3.
 */
static inline float mavlink_msg_att_body_data_get_q3(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  24);
}

/**
 * @brief Get field roll from att_body_data message
 *
 * @return  roll angle.
 */
static inline float mavlink_msg_att_body_data_get_roll(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  28);
}

/**
 * @brief Get field pitch from att_body_data message
 *
 * @return  pitch angle.
 */
static inline float mavlink_msg_att_body_data_get_pitch(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  32);
}

/**
 * @brief Get field yaw from att_body_data message
 *
 * @return  yaw angle.
 */
static inline float mavlink_msg_att_body_data_get_yaw(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  36);
}

/**
 * @brief Get field w_ib_b_x from att_body_data message
 *
 * @return  x axis angle speed in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  40);
}

/**
 * @brief Get field w_ib_b_y from att_body_data message
 *
 * @return  y axis angle speed in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  44);
}

/**
 * @brief Get field w_ib_b_z from att_body_data message
 *
 * @return  z axis angle speed in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  48);
}

/**
 * @brief Get field w_ib_b_c_x from att_body_data message
 *
 * @return  x axis angle speed control in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_c_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  52);
}

/**
 * @brief Get field w_ib_b_c_y from att_body_data message
 *
 * @return  y axis angle speed control in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_c_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  56);
}

/**
 * @brief Get field w_ib_b_c_z from att_body_data message
 *
 * @return  z axis angle speed control in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_c_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  60);
}

/**
 * @brief Get field w_ib_b_bia_x from att_body_data message
 *
 * @return  Zero deviation of gyro x axis.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_bia_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  64);
}

/**
 * @brief Get field w_ib_b_bia_y from att_body_data message
 *
 * @return  Zero deviation of gyro y axis.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_bia_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  68);
}

/**
 * @brief Get field w_ib_b_bia_z from att_body_data message
 *
 * @return  Zero deviation of gyro z axis.
 */
static inline float mavlink_msg_att_body_data_get_w_ib_b_bia_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  72);
}

/**
 * @brief Get field f_ib_b_x from att_body_data message
 *
 * @return  force in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_f_ib_b_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  76);
}

/**
 * @brief Get field f_ib_b_y from att_body_data message
 *
 * @return  force in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_f_ib_b_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  80);
}

/**
 * @brief Get field f_ib_b_z from att_body_data message
 *
 * @return  force in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_f_ib_b_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  84);
}

/**
 * @brief Get field f_ib_b_bia_x from att_body_data message
 *
 * @return  Zero deviation of force x axis.
 */
static inline float mavlink_msg_att_body_data_get_f_ib_b_bia_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  88);
}

/**
 * @brief Get field f_ib_b_bia_y from att_body_data message
 *
 * @return  Zero deviation of force y axis.
 */
static inline float mavlink_msg_att_body_data_get_f_ib_b_bia_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  92);
}

/**
 * @brief Get field f_ib_b_bia_z from att_body_data message
 *
 * @return  Zero deviation of force z axis.
 */
static inline float mavlink_msg_att_body_data_get_f_ib_b_bia_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  96);
}

/**
 * @brief Get field bm_x from att_body_data message
 *
 * @return  x axis magnet in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_bm_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  100);
}

/**
 * @brief Get field bm_y from att_body_data message
 *
 * @return  y axis magnet in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_bm_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  104);
}

/**
 * @brief Get field bm_z from att_body_data message
 *
 * @return  z axis magnet in B coordinate.
 */
static inline float mavlink_msg_att_body_data_get_bm_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  108);
}

/**
 * @brief Get field bm_bia_x from att_body_data message
 *
 * @return  Zero deviation of magnet x axis.
 */
static inline float mavlink_msg_att_body_data_get_bm_bia_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  112);
}

/**
 * @brief Get field bm_bia_y from att_body_data message
 *
 * @return  Zero deviation of magnet y axis.
 */
static inline float mavlink_msg_att_body_data_get_bm_bia_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  116);
}

/**
 * @brief Get field bm_bia_z from att_body_data message
 *
 * @return  Zero deviation of magnet z axis.
 */
static inline float mavlink_msg_att_body_data_get_bm_bia_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  120);
}

/**
 * @brief Get field v_eb_n_x from att_body_data message
 *
 * @return  x axis speed.
 */
static inline float mavlink_msg_att_body_data_get_v_eb_n_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  124);
}

/**
 * @brief Get field v_eb_n_y from att_body_data message
 *
 * @return  y axis speed.
 */
static inline float mavlink_msg_att_body_data_get_v_eb_n_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  128);
}

/**
 * @brief Get field v_eb_n_z from att_body_data message
 *
 * @return  z axis speed.
 */
static inline float mavlink_msg_att_body_data_get_v_eb_n_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  132);
}

/**
 * @brief Get field p_eb_n_x from att_body_data message
 *
 * @return  longitude.
 */
static inline float mavlink_msg_att_body_data_get_p_eb_n_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  136);
}

/**
 * @brief Get field p_eb_n_y from att_body_data message
 *
 * @return  latitude.
 */
static inline float mavlink_msg_att_body_data_get_p_eb_n_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  140);
}

/**
 * @brief Get field p_eb_n_z from att_body_data message
 *
 * @return  altitude.
 */
static inline float mavlink_msg_att_body_data_get_p_eb_n_z(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  144);
}

/**
 * @brief Decode a att_body_data message into a struct
 *
 * @param msg The message to decode
 * @param att_body_data C-struct to decode the message contents into
 */
static inline void mavlink_msg_att_body_data_decode(const mavlink_message_t* msg, mavlink_att_body_data_t* att_body_data)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    att_body_data->state0 = mavlink_msg_att_body_data_get_state0(msg);
    att_body_data->state1 = mavlink_msg_att_body_data_get_state1(msg);
    att_body_data->state2 = mavlink_msg_att_body_data_get_state2(msg);
    att_body_data->q0 = mavlink_msg_att_body_data_get_q0(msg);
    att_body_data->q1 = mavlink_msg_att_body_data_get_q1(msg);
    att_body_data->q2 = mavlink_msg_att_body_data_get_q2(msg);
    att_body_data->q3 = mavlink_msg_att_body_data_get_q3(msg);
    att_body_data->roll = mavlink_msg_att_body_data_get_roll(msg);
    att_body_data->pitch = mavlink_msg_att_body_data_get_pitch(msg);
    att_body_data->yaw = mavlink_msg_att_body_data_get_yaw(msg);
    att_body_data->w_ib_b_x = mavlink_msg_att_body_data_get_w_ib_b_x(msg);
    att_body_data->w_ib_b_y = mavlink_msg_att_body_data_get_w_ib_b_y(msg);
    att_body_data->w_ib_b_z = mavlink_msg_att_body_data_get_w_ib_b_z(msg);
    att_body_data->w_ib_b_c_x = mavlink_msg_att_body_data_get_w_ib_b_c_x(msg);
    att_body_data->w_ib_b_c_y = mavlink_msg_att_body_data_get_w_ib_b_c_y(msg);
    att_body_data->w_ib_b_c_z = mavlink_msg_att_body_data_get_w_ib_b_c_z(msg);
    att_body_data->w_ib_b_bia_x = mavlink_msg_att_body_data_get_w_ib_b_bia_x(msg);
    att_body_data->w_ib_b_bia_y = mavlink_msg_att_body_data_get_w_ib_b_bia_y(msg);
    att_body_data->w_ib_b_bia_z = mavlink_msg_att_body_data_get_w_ib_b_bia_z(msg);
    att_body_data->f_ib_b_x = mavlink_msg_att_body_data_get_f_ib_b_x(msg);
    att_body_data->f_ib_b_y = mavlink_msg_att_body_data_get_f_ib_b_y(msg);
    att_body_data->f_ib_b_z = mavlink_msg_att_body_data_get_f_ib_b_z(msg);
    att_body_data->f_ib_b_bia_x = mavlink_msg_att_body_data_get_f_ib_b_bia_x(msg);
    att_body_data->f_ib_b_bia_y = mavlink_msg_att_body_data_get_f_ib_b_bia_y(msg);
    att_body_data->f_ib_b_bia_z = mavlink_msg_att_body_data_get_f_ib_b_bia_z(msg);
    att_body_data->bm_x = mavlink_msg_att_body_data_get_bm_x(msg);
    att_body_data->bm_y = mavlink_msg_att_body_data_get_bm_y(msg);
    att_body_data->bm_z = mavlink_msg_att_body_data_get_bm_z(msg);
    att_body_data->bm_bia_x = mavlink_msg_att_body_data_get_bm_bia_x(msg);
    att_body_data->bm_bia_y = mavlink_msg_att_body_data_get_bm_bia_y(msg);
    att_body_data->bm_bia_z = mavlink_msg_att_body_data_get_bm_bia_z(msg);
    att_body_data->v_eb_n_x = mavlink_msg_att_body_data_get_v_eb_n_x(msg);
    att_body_data->v_eb_n_y = mavlink_msg_att_body_data_get_v_eb_n_y(msg);
    att_body_data->v_eb_n_z = mavlink_msg_att_body_data_get_v_eb_n_z(msg);
    att_body_data->p_eb_n_x = mavlink_msg_att_body_data_get_p_eb_n_x(msg);
    att_body_data->p_eb_n_y = mavlink_msg_att_body_data_get_p_eb_n_y(msg);
    att_body_data->p_eb_n_z = mavlink_msg_att_body_data_get_p_eb_n_z(msg);
#else
        uint8_t len = msg->len < MAVLINK_MSG_ID_ATT_BODY_DATA_LEN? msg->len : MAVLINK_MSG_ID_ATT_BODY_DATA_LEN;
        memset(att_body_data, 0, MAVLINK_MSG_ID_ATT_BODY_DATA_LEN);
    memcpy(att_body_data, _MAV_PAYLOAD(msg), len);
#endif
}
